package com.icangya.service;

import com.icangya.domain.*;

import java.util.List;
/**
 * author:黄明浜
 * date:2017.10.13 PM: 5:00
 */
public interface IUserService {


    /**
     * 根据推荐码，查询用户
     * @param referralCode
     * @return
     */
    User getUserByReferralCode(String referralCode);

    /**
     * 查询所有的用户 并根据页码分页
     * @return
     */
    List<Object> findAll(Integer pageNum);

    /**
     * 根据用户 id 查询 余额
     * @param id
     * @return
     */
    Balance findBalanceByUserId(Long id);

    /**
     * 修改用户信息
     * @param user
     * @return
     */
    Boolean updateUser(User user);
    /**
     * 根据用户 id 查询用户支出明细
     * @param id
     * @return
     */
    List<Object> findByUserExpendRecord(Long id ,Integer pageNum);

    /**
     * 根据用户 id 查询账户充值明细
     * @param id
     * @param pageNum
     * @return
     */
    List<Object> findByUserRechargeRecord(Long id ,Integer pageNum);

    /**
     * 根据用户ID 查询积分明细
     * @param id
     * @param pageNum
     * @return
     */
    List<Object> findByUserPointsRecord(Long id, Integer pageNum);


    List getRedPacketRecord(long uid);

    /**
     * 获取用户所有订单信息
     * @param userid
     * @return
     */
    List<RwGoodOrder> getOrdersByUserId(long userid);

    /**
     * 根据ID查询用户
     * @param id
     * @return
     */
    User getUserByUid(Long id);

    /**
     * 根据用户 ID 查询所有的商品升级记录
     * @param uid
     * @return
     */
    List<GoodsUpgradeRecord> getGoodsUpgradeByUserId(long uid);

    /**
     * 获取所有猜奇偶的记录
     * @return
     */
    List  getOdevityAll();

    /**
     *获取用户的直推下级用户信息
     * @param uid
     * @return
     */
    List getUserFirstLevel(Long uid);

    /**
     * 根据用户 ID 查询退货记录表
     * @param uid
     * @param pageNum
     * @return
     */
    List<Object> goodSalesReturnRecord(Long uid , Integer pageNum);

    /**
     * 根据用户Id 查询订单
     * @param uid
     * @param pageNum
     * @return
     */
    List<Object> findOrderByUserId(Long uid , Integer pageNum);

    /**
     * 根据用户id 查询红包拆分明细
     * @param uid
     * @param pageNum
     * @return
     */
    List<Object> findRedPacketRecordByUserId(Long uid , Integer pageNum);

    /**
     * 根据用户Id 查询用户的银行卡信息
     * @param id
     * @return
     */
    List<RwUserBank> findBankCarByUserId(long id);

    //根据用户Id 查询猜奇偶明细
    List<Object> findOdevityByUserId(Long id , Integer pageNum);

    //根据用户ID 获取代理人数
    Long[] findUserLevelByUserId(Long id);

    User findByUserReal(Long id);

    /**
     * 获取用户所有历史升级记录并且分页
     * @param uid
     * @return
     */
    List<Object> getGoodsUpgradeByUserIdPaging(long uid , Integer pageNum);
    /**
     * 添加用户提现记录
     * @param userWithdrawRecord
     * @return
     */
    UserWithdrawRecord saveUserWithdrawRecord(UserWithdrawRecord userWithdrawRecord);

    /**
     * 查询所有用户的申请提现记录
     * @param startPage
     * @return
     */
    List getUserWithdrawRecordAll(int startPage);

    /**
     * 根据提现状态查询用户申请提现的记录
     * @param status
     * @param startPage
     * @return
     */
    List getUserWithdrawRecordByStatus(int status,int startPage);


    /**
     * 修改用户申请提现状态
     * @param userWithdrawRecord
     * @return
     */
    Boolean updateUserWithdrawByStatus(UserWithdrawRecord userWithdrawRecord);

    /**
     * 根据id查询单条提现记录
     * @param id
     * @return
     */
    UserWithdrawRecord getUserWithdrawRecord(long id);
}
